from django.shortcuts import render
from django.views import View
from apps.areas.models import Area
from django import http
from django.core.cache import cache
# Create your views here.

class SubAreasView(View):
    '''查询城市或者区县数据'''
    # 对于省市区的数据，不是用户必须交互或者必须得到结果，没有数据可以不管
    # 如果希望项目中的任何错误，都在日志输出，那么可以try

    def get(self,request,parentid):
        '''
        实现查询城市或者区县数据的逻辑
        :param request: 省份id、城市id
        :param parentid: 城市数据，区县数据
        :return: 如果是parentid是省份id，那么就查城市数据，如果是城市id，查询区县数据。
        '''
        # 读取缓存
        sub_data = cache.get('sub_data_%s' % parentid)
        if sub_data:
            return http.JsonResponse({'code':0,'errmsg':'ok','sub_data':sub_data})

        # 查询当前的父级地区：省份或城市
        parent_area = Area.objects.get(id=parentid)
        # 查询当前地区的子集（一查多）：省份查城市，城市查区县,要查询出父级对应的所有子级，
        sub_model_list = parent_area.subs.all()

        # 将子级的模型列表转成字典列表
        subs = []
        for sub_model in sub_model_list:
            sub_dict = {
                'id':sub_model.id,
                'name': sub_model.name,
            }
            subs.append(sub_dict)


        # 子级数据：城市 区县
        sub_data = {
            'id': parent_area, # 父级ID
            'name': parent_area.name, # 父级名字
            'subs': subs, # 子级字典列表
        }

        # 缓存子级数据

        #  对于自己的缓存，我们需要区分当前缓存的是那个父级的子级
        #  比如，需要区分是河北省的城市还是陕西省的城市
        cache.set('sub_data_%s' % parentid, sub_data,3600)



        return http.JsonResponse({'code':0,'errmsg':'ok','sub_data':sub_data})


class ProvinceAreasView(View):
    '''查询省份数据
    GET /areas/
    '''
    def get(self,request):
        '''查询省份数据逻辑'''

        # 读取缓存，如果在逻辑开始的时候读取缓存，那么后面的所有逻辑都不执行
        province_dict_list = cache.get('province_list')
        if province_dict_list:
            return http.JsonResponse({'code':0,'errmsg':'ok','province_list':province_dict_list})
        # 查询省份数据
        # Area.objects.all()# 查询多有的省市区
        # Area.objects.get()# 查询一个
        province_model_list = Area.objects.filter(parent=None)

        province_dict_list = []
        # 将查询集模型转字典列表
        for province_model in province_model_list:
            # 把模型数据转成字典数据
            province_dict = {
                "id":province_model.id,
                "name":province_model.name
            }
            province_dict_list.append(province_dict)
            # 需要缓存省份字典列表
            # cache.set('key','value','过去时间'）
            cache.set('province_list',province_dict_list,3600)

        # 重要提示： JsonResponse()不识别模型数据（模型对象和查询），他只是别字典，列表，字典列表
        return http.JsonResponse({'code':0,'errmsg':'ok','province_model_list':province_dict_list})




